home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / xalan.jar / org / apache / xalan / xslt / ExtensionNSHandler.class (.txt) < prev    next >
Encoding:
Java Class File  |  2000-04-12  |  6.6 KB  |  175 lines

  1. package org.apache.xalan.xslt;
  2.  
  3. import com.ibm.bsf.BSFManager;
  4. import java.io.FileNotFoundException;
  5. import java.io.IOException;
  6. import java.io.Serializable;
  7. import java.net.MalformedURLException;
  8. import java.net.URL;
  9. import java.util.Hashtable;
  10. import java.util.StringTokenizer;
  11. import java.util.Vector;
  12. import org.apache.xalan.xpath.ExtensionFunctionHandler;
  13. import org.apache.xalan.xpath.XPathException;
  14. import org.apache.xalan.xpath.XPathProcessorException;
  15. import org.apache.xalan.xpath.dtm.DTMLiaison;
  16. import org.apache.xalan.xpath.xdom.XercesLiaison;
  17. import org.apache.xalan.xpath.xml.QName;
  18. import org.apache.xalan.xpath.xml.XMLParserLiaison;
  19. import org.w3c.dom.Attr;
  20. import org.w3c.dom.Document;
  21. import org.w3c.dom.Element;
  22. import org.w3c.dom.Node;
  23. import org.w3c.dom.NodeList;
  24. import org.xml.sax.InputSource;
  25. import org.xml.sax.Parser;
  26. import org.xml.sax.SAXException;
  27.  
  28. public class ExtensionNSHandler extends ExtensionFunctionHandler implements Serializable {
  29.    transient XSLTEngineImpl xslp;
  30.    Hashtable elements = new Hashtable();
  31.    boolean componentDescLoaded;
  32.  
  33.    public ExtensionNSHandler(XSLTEngineImpl var1, String var2) {
  34.       super(var2);
  35.       this.xslp = var1;
  36.    }
  37.  
  38.    public ExtensionNSHandler(XSLTEngineImpl var1, String var2, String var3, String var4, String var5, String var6, String var7) {
  39.       super(var2, var4, var5, var6, var7);
  40.       this.xslp = var1;
  41.       this.setElements(var3);
  42.       this.componentDescLoaded = true;
  43.    }
  44.  
  45.    public void setFunctions(String var1) {
  46.       super.setFunctions(var1);
  47.       this.componentDescLoaded = true;
  48.    }
  49.  
  50.    public void setScript(String var1, String var2, String var3) {
  51.       super.setScript(var1, var2, var3);
  52.       this.componentDescLoaded = true;
  53.    }
  54.  
  55.    public void setElements(String var1) {
  56.       if (var1 != null) {
  57.          StringTokenizer var2 = new StringTokenizer(var1, " \t\n\r", false);
  58.          Object var3 = new Object();
  59.  
  60.          while(var2.hasMoreTokens()) {
  61.             String var4 = var2.nextToken();
  62.             this.elements.put(var4, var3);
  63.          }
  64.  
  65.          this.componentDescLoaded = true;
  66.       }
  67.    }
  68.  
  69.    public boolean isElementAvailable(String var1) {
  70.       return this.elements.get(var1) != null;
  71.    }
  72.  
  73.    public void processElement(String var1, Element var2, XSLTEngineImpl var3, Stylesheet var4, Node var5, Node var6, QName var7, Class var8, Object var9) throws XSLProcessorException, MalformedURLException, FileNotFoundException, IOException, SAXException {
  74.       if (!super.componentStarted) {
  75.          try {
  76.             this.startupComponent(var8);
  77.          } catch (XPathProcessorException var14) {
  78.             throw new XSLProcessorException(((XPathException)var14).getMessage(), var14);
  79.          }
  80.       }
  81.  
  82.       Object var10 = null;
  83.  
  84.       try {
  85.          XSLProcessorContext var11 = new XSLProcessorContext(var3, var4, var5, var6, var7);
  86.          Vector var12 = new Vector(2);
  87.          var12.addElement(var11);
  88.          var12.addElement(var2);
  89.          var10 = super.callFunction(var1, var12, var9, var8);
  90.       } catch (XPathProcessorException var13) {
  91.          throw new XSLProcessorException(((XPathException)var13).getMessage(), var13);
  92.       }
  93.  
  94.       if (var10 != null) {
  95.          var3.outputToResultTree(var4, var10);
  96.       }
  97.  
  98.    }
  99.  
  100.    protected void startupComponent(Class var1) throws XPathProcessorException {
  101.       if (!ExtensionFunctionHandler.bsfInitialized) {
  102.          Class var2 = ExtensionFunctionHandler.class$com$ibm$bsf$BSFManager != null ? ExtensionFunctionHandler.class$com$ibm$bsf$BSFManager : (ExtensionFunctionHandler.class$com$ibm$bsf$BSFManager = class$("com.ibm.bsf.BSFManager"));
  103.          synchronized(var2){}
  104.  
  105.          try {
  106.             ExtensionFunctionHandler.bsfInitialized = true;
  107.             BSFManager.registerScriptingEngine("xslt-javaclass", "org.apache.xalan.xpath.XSLTJavaClassEngine", new String[0]);
  108.          } catch (Throwable var6) {
  109.             throw var6;
  110.          }
  111.       }
  112.  
  113.       if (!this.componentDescLoaded) {
  114.          try {
  115.             this.loadComponentDescription();
  116.          } catch (Exception var5) {
  117.             throw new XPathProcessorException(((Throwable)var5).getMessage(), var5);
  118.          }
  119.       }
  120.  
  121.       super.startupComponent(var1);
  122.    }
  123.  
  124.    private void loadComponentDescription() throws XSLProcessorException, MalformedURLException, FileNotFoundException, IOException, SAXException {
  125.       try {
  126.          String var12 = super.namespaceUri.startsWith("class:") ? super.namespaceUri.substring(6) : super.namespaceUri;
  127.          Class.forName(var12);
  128.          this.setScript("javaclass", super.namespaceUri, (String)null);
  129.          this.componentDescLoaded = true;
  130.       } catch (Exception var11) {
  131.          URL var1 = this.xslp.getURLFromString(super.namespaceUri, this.xslp.m_stylesheetRoot.m_baseIdent);
  132.          Object var2 = this.xslp.m_parserLiaison;
  133.          if (var2 instanceof DTMLiaison) {
  134.             var2 = new XercesLiaison();
  135.             ((Parser)var2).setErrorHandler(new ExtErrorHandler(this, var1.toString()));
  136.          }
  137.  
  138.          Object var3 = null;
  139.          ((Parser)var2).parse(new InputSource(var1.toString()));
  140.          Document var4 = ((XMLParserLiaison)var2).getDocument();
  141.          Element var13 = var4.getDocumentElement();
  142.          this.setElements(var13.getAttribute("elements"));
  143.          this.setFunctions(var13.getAttribute("functions"));
  144.          NodeList var5 = var13.getElementsByTagName("lxslt:script");
  145.          switch (var5.getLength()) {
  146.             case 1:
  147.                Element var6 = (Element)var5.item(0);
  148.                String var7 = var6.getAttribute("lang");
  149.                Attr var8 = var6.getAttributeNode("src");
  150.                String var9 = var8 == null ? null : var8.getValue();
  151.                String var10 = this.getScriptString(var6);
  152.                this.setScript(var7, var9, var10);
  153.             case 0:
  154.                this.componentDescLoaded = true;
  155.                return;
  156.             default:
  157.                throw new XSLProcessorException("too many <script>s in component");
  158.          }
  159.       }
  160.    }
  161.  
  162.    private String getScriptString(Element param1) {
  163.       // $FF: Couldn't be decompiled
  164.    }
  165.  
  166.    // $FF: synthetic method
  167.    static Class class$(String var0) {
  168.       try {
  169.          return Class.forName(var0);
  170.       } catch (ClassNotFoundException var2) {
  171.          throw new NoClassDefFoundError(((Throwable)var2).getMessage());
  172.       }
  173.    }
  174. }
  175.